package day13;

public class Demo01 {
	public static void main(String[] args) {

		test03();

	}

	private static void test03() {
		char x = 'Q';
		// 将其转换成大写
		// char y = (char)(x - 32);
		char y = Character.toUpperCase('Q');
		System.out.println(y);
		System.out.println(Character.toLowerCase('q'));
		System.out.println(Character.isUpperCase('Q'));
		System.out.println(Character.isLowerCase('Q'));
	}

	private static void test02() {
		int a1 = 100, a2 = 100;
		int b1 = 200, b2 = 200;
		Integer a3 = 100, a4 = 100;
		Integer b3 = 200, b4 = 200;

		System.out.println(a1 == a2); // true 
		System.out.println(b1 == b2); // true
		System.out.println(a1 == a3); // true
		System.out.println(a3 == a4); // true
		System.out.println(b1 == b3); // true
		System.out.println(b3 == b4); // false

		// 关于Integer的一个小特性
		// Integer类对byte范围的值进行了缓存(-128 ~ 127)
		// 通过自动装箱创建Integer对象时
		// 会判断装箱值是否在缓存范围内
		// 如果是: 不会创建新的实例空间
		// 如果不是: 会创建新的实例空间

		// 强烈建议: 实际开发中, 遇到对象类型比较时, 不要用"==", 用`equals`
		System.out.println(a3.equals(a4));
		System.out.println(b3.equals(b4));

	}

	private static void test01() {
		// 通过构造方法创建Integer对象
		Integer i1 = new Integer(123);
		//		System.out.println(i1);
		Integer i2 = new Integer("123");
		//		System.out.println(i2);

		// 字符串转Integer
		Integer i3 = Integer.parseInt("456");
		//		System.out.println(i3);
		Integer i4 = Integer.valueOf("135");
		//		System.out.println(i4);
		// int转字符串
		String str0 = Integer.toString(123);
		//		System.out.println(str0);
		String str4 = new Integer(123).toString();
		//		System.out.println(str4);

		// 进制转换
		// 十进制转二进制
		String str1 = Integer.toBinaryString(123);
		//		System.out.println(str1);
		// 十进制转八进制
		String str2 = Integer.toOctalString(123);
		//		System.out.println(str2);
		// 十进制转十六进制
		String str3 = Integer.toHexString(123);
		//		System.out.println(str3);
		// 二进制转十进制
		Integer i5 = Integer.parseInt("123", 10);
		//		System.out.println(i5);
		Integer i6 = Integer.parseInt("1101101", 2);
		//		System.out.println(i6);
		Integer i7 = Integer.valueOf("1101101", 2);
		//		System.out.println(i7);
		// 八进制转十进制
		Integer i8 = Integer.parseInt("176", 8);
		//		System.out.println(i8);
		Integer i9 = Integer.valueOf("176", 8);
		//		System.out.println(i9);
		// 十六进制转十进制
		Integer i10 = Integer.parseInt("1F2C", 16);
		//		System.out.println(i10);
		Integer i11 = Integer.valueOf("1f2c", 16);
		//		System.out.println(i11);

		// 与其它类型的转换
		Integer i12 = new Integer(123);
		byte b1 = i12.byteValue();
		short s1 = i12.shortValue();
		int i13 = i12.intValue();
		long l1 = i12.longValue();
		float f1 = i12.floatValue();
		double d1 = i12.doubleValue();

		// 装箱 与 拆箱
		// 将基本类型数据包装成其对应的对象类型: 装箱
		Integer i14 = new Integer(123);
		// 从对象类型中取出其对应的基本类型数据: 拆箱
		int i15 = i14.intValue();

		Integer i16 = new Integer(10);
		Integer i17 = new Integer(12);
		int sum = i16.intValue() + i17.intValue();
		//		System.out.println(sum);

		// 从JDK1.5开始, 可以自动装箱/自动拆箱
		// 自动装箱: 直接将基本类型数据赋值给引用类型变量
		//          会自动将基本类型装箱
		// 自动拆箱: 直接使用对象类型变量与基本类型数据进行运算
		//          会自动对对象类型进行拆箱
		Integer i18 = 10;
		//		System.out.println(i18);
		int sum2 = i18 + 22;
		//		System.out.println(sum2);

		// Integer的常量
		//		System.out.println(Integer.MAX_VALUE);
		//		System.out.println(Integer.MIN_VALUE);

		//		Integer.max(123, 22);

		// 由于对象类型可以存null
		// 而与基本类型数据运算时, 会自动拆箱
		// 自动拆箱其实就是对象访问intValue()方法
		// 此时会引发java.lang.NullPointerException
		// 所以应当在运算前加上判断
		Integer i19 = null;
		if (i19 != null) {
			// java.lang.NullPointerException
			int sum3 = i19 + 1;
		}
	}
}
